<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>85_instanceof和hasOwn</title>
		<script>
			/* 
			instanceof用来检查一个对象是否是一个类的实例
			- instanceof检查的是对象的原型链上是否有该类实例
				只要原型链上有该类实例，就会返回true
				
			- dog -> Animal的实例 -> Object实例 -> 0bject原型.
			
			- Object是所有对象的原型，所以任何和对象和Object进行instanceof运算都会返回true
			 */

			class Animal {}
			class Dog extends Animal {}

			const dog = new Dog();

			console.log(dog instanceof Dog); //true
			console.log(dog instanceof Animal); //true
			console.log(dog instanceof Object); //true

			class Person {
				name = "孙悟空";
				age = 18;

				sayHello() {
					console.log("Hello,我是", this.name);
				}
			}

			/* 
			in运算符
				- 使用in运算符检查属性时，无论属性在对象自身还是在原型中，都会返回truel
				
			对象.hasOwnProperty(属性名)（不推荐使用）
				-用来检查一个对象的自身是否含有某个属性；
				
				hasOwnProperty是在Object原型里。
				
				
			Object.has0wn(对象，属性名)（推荐使用）
				- 用来检查一个对象的自身是否含有某个属性
			 */
			const p = new Person();
			console.log("sayHello" in p); //true
			console.log(p.hasOwnProperty("sayHello")) //false 判断sayHello属性是否在p里面。

			console.log(p.__proto__.__proto__.hasOwnProperty("hasOwnProperty"));
		</script>
	</head>
	<body>
	</body>
</html>